package com.dc.designPattern._22_responsibilitychain.extend.extend2;

import lombok.Data;

import java.util.Objects;

/**
 * Description: 责任链模式_抽象处理者_处理接口
 * @author: gdc
 * @date: 2021/6/28
 * @version 1.0
 */
@Data
public abstract class IHandler {

    public final static int FATHER_LEVEL = 1;
    public final static int HUSBAND_LEVEL = 2;
    public final static int SON_LEVEL = 3;

    /**
     * 当前等级
     */
    private int level;
    /**
     * 下一个处理类
     */
    private IHandler nextHandler;

    public IHandler(int level) {
        this.level = level;
    }

    /**
     * 处理请求，    一个女性（女儿、妻子和母亲）要求逛街，如何处理这个请求
     *  注意：此处是一个模版方法
     *
     * @param women         女性
     */
    public final void handleMessage(IWomen women) {
        if (women.getType() == level) {
            this.response(women);
        } else {
            if (Objects.nonNull(getNextHandler())) {
                this.nextHandler.handleMessage(women);
            } else {
                System.out.println("没有地方请求了，按照不同意处理\n");
            }
        }
    }

    /**
     * 设置下一个处理类（由子类完成实现）
     * @param handler           处理类
     */
    protected void setNext(IHandler handler) {
        this.nextHandler = handler;
    }

    /**
     * 响应方法（由子类完成实现）
     * @param women             请求类
     */
    protected abstract void response(IWomen women);
}
